home *** CD-ROM | disk | FTP | other *** search
- #ifndef PROCPS_PROC_PROCPS_H
- #define PROCPS_PROC_PROCPS_H
-
- #ifdef __cplusplus
- #define EXTERN_C_BEGIN extern "C" {
- #define EXTERN_C_END }
- #else
- #define EXTERN_C_BEGIN
- #define EXTERN_C_END
- #endif
-
- // Some ports make the mistake of running a 32-bit userspace
- // on a 64-bit kernel. Shame on them. It's not at all OK to
- // make everything "long long", since that causes unneeded
- // slowness on 32-bit hardware.
- //
- // SPARC: The 32-bit kernel was looking like an ex-penguin,
- // but it lives! ("I'm not dead yet.") So, 64-bit users will
- // just have to compile for 64-bit. Aw, the suffering.
- //
- // MIPS: Used 32-bit for embedded systems and obsolete hardware.
- // The 64-bit systems use an n32 format executable, defining
- // _ABIN32 to indicate this. Since n32 doesn't currently run on
- // any 32-bit system, nobody get hurt if it's bloated. Not that
- // this is sane of course, but it won't hurt the 32-bit users.
- // __mips_eabi means eabi, which comes in both sizes, but isn't used.
- //
- // PowerPC: Big ugly problem! 32-bit Macs are still popular. :-/
- //
- // x86-64: So far, nobody has been dumb enough to go 32-bit.
- //
- // Unknown: PA-RISC and zSeries
- //
- #if defined(k64test) || defined(_ABIN32)
- #define KLONG long long // not typedef; want "unsigned KLONG" to work
- #define KLF "L"
- #define STRTOUKL strtoull
- #else
- #define KLONG long
- #define KLF "l"
- #define STRTOUKL strtoul
- #endif
-
- // since gcc-2.5
- #define NORETURN __attribute__((__noreturn__))
- #define FUNCTION __attribute__((__const__)) // no access to global mem, even via ptr, and no side effect
-
- #if !defined(restrict) && __STDC_VERSION__ < 199901
- #if __GNUC__ > 2 || __GNUC_MINOR__ >= 92
- #define restrict __restrict__
- #else
- #warning No restrict keyword?
- #define restrict
- #endif
- #endif
-
- #if __GNUC__ > 2 || __GNUC_MINOR__ >= 96
- // won't alias anything, and aligned enough for anything
- #define MALLOC __attribute__ ((__malloc__))
- // no side effect, may read globals
- #define PURE __attribute__ ((__pure__))
- // tell gcc what to expect: if(unlikely(err)) die(err);
- #define likely(x) __builtin_expect(!!(x),1)
- #define unlikely(x) __builtin_expect(!!(x),0)
- #define expected(x,y) __builtin_expect((x),(y))
- #else
- #define MALLOC
- #define PURE
- #define likely(x) (x)
- #define unlikely(x) (x)
- #define expected(x,y) (x)
- #endif
-
- #if SHARED==1 && (__GNUC__ > 2 || __GNUC_MINOR__ >= 96)
- #define LABEL_OFFSET
- #endif
-
- #define STRINGIFY_ARG(a) #a
- #define STRINGIFY(a) STRINGIFY_ARG(a)
-
- // marks old junk, to warn non-procps library users
- #if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
- #define OBSOLETE __attribute__((deprecated))
- #else
- #define OBSOLETE
- #endif
-
- #if ( __GNUC__ == 3 && __GNUC_MINOR__ > 1 ) || __GNUC__ > 3
- // Tells gcc that function is library-internal;
- // so no need to do dynamic linking at run-time.
- // This might work with slightly older compilers too.
- #define HIDDEN __attribute__((visibility("hidden")))
- // The opposite, in case -fvisibility=hidden used
- #define EXPORT __attribute__((visibility("default")))
- // Tell g++ that a function won't throw exceptions.
- #define NOTHROW __attribute__((__nothrow__))
- #else
- #define HIDDEN
- #define EXPORT
- #define NOTHROW
- #endif
-
- // Like HIDDEN, but for an alias that gets created.
- // In gcc-3.2 there is an alias+hidden conflict.
- // Many will have patched this bug, but oh well.
- #if ( __GNUC__ == 3 && __GNUC_MINOR__ > 2 ) || __GNUC__ > 3
- #define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x),visibility("hidden")))
- #else
- #define HIDDEN_ALIAS(x) extern __typeof(x) x##_direct __attribute__((alias(#x)))
- #endif
-
- #endif
-